package fiuba.algo3.persistencia;

import java.util.List;

import fiuba.algo3.XMLProcessor.nucleo.NodoXML;
import fiuba.algo3.mundo.NodoMundo;

public abstract class ConstructorNodoMundo
{
	public static final String CLASE = "NodoMundo";

	private static boolean puedeSerConstruido(NodoXML nodo)
	{
		return nodo.nombre().equals("objeto") &&
				nodo.obtenerValorAtributo("clase").equals(CLASE);
	}

	public static NodoMundo construir(NodoXML nodoObjetoNodoMundo)
	{
		if (!puedeSerConstruido(nodoObjetoNodoMundo)) return null;

		List<NodoXML> tablaValores = nodoObjetoNodoMundo.obtenerHijos();

		int conexiones[] = {0};

		for (NodoXML nodo : tablaValores)
		{
			if (nodo.nombre().equals("campo"))
				{
					String valor = nodo.obtenerValorAtributo("nombre");
					if (valor.equals("conexiones"))
					{
						Object conexionesPrevistas[] = ConstructorArreglos.construir(nodo.obtenerPrimogenito());
						int cantidadConexiones = conexionesPrevistas.length;
						conexiones = new int[cantidadConexiones];

						for (int i = 0; i < cantidadConexiones; i++)
							conexiones[i] = (int)(Integer)conexionesPrevistas[i];
					}
				}
		}

		return new NodoMundo(conexiones);
	}

	public static NodoMundo[] construir(List<NodoXML> listaNodoMundos)
	{
		int cantidadElementos = listaNodoMundos.size();
		NodoMundo[] listaNodoMundo = new NodoMundo[cantidadElementos];

		for (int i = 0; i < cantidadElementos; i++)
			listaNodoMundo[i] = construir(listaNodoMundos.get(i));

		return listaNodoMundo;
	}
}
